/** 怒首领蜂等适用,可切换散枪模式,默认(default)或自动(auto)
  默认就是正常的C full auto跟游戏自身没区别
  自动是按一下移动一直散枪,再按一下停止

  游戏按键设定为:按键1-shot,按键2-laser,按键3-雷

  By setycyas @2024-10-11
*/

/* 全局设定
*/ {
#Warn
#MaxThreadsPerHotkey 1
SetWorkingDir(A_ScriptDir)
#Include "..\Class\FaceDetector.2.ahk"
#Include "..\Class\CommonMacro.2.ahk"
#Include "..\Class\CommonUI.2.ahk"
#Include "..\Class\MyFuns.2.ahk"
#Include "..\Class\MyEmu.2.ahk"
#Include "..\Class\OrderMap.2.ahk"
;SendMode("Event")
SendMode("Input")
}

/* 制作怒首领蜂专用的宏类
*/ class DDPMacro extends CommonMacro {

  MODE_DEFAULT := "default" ;常量,默认模式
  MODE_AUTO := "auto" ;常量,自动模式

  UI := "" ;显示需要的ui
  shotSwitch := False ;是否按住shot,默认为否
  mode := this.MODE_DEFAULT ;按键模式,默认为default

  /* 构造函数,设定预设数据
  */
  __New(faceDetector, keys){
    super.__New(faceDetector, keys)
  }
  
  /* 函数 
  */
  _中止shot(){
    this._up(1)
    this.shotSwitch := False
  }
  _开启shot(){
    this._down(1)
    this.shotSwitch := True
  }
  _shot切换(){
    if (this.shotSwitch) {
      this._中止shot()
      this.UI._statusBar.SetText("停止自动shot")
    } else {
      this._开启shot()
      this.UI._statusBar.SetText("自动Shot中")
    }
  }
  
  /* 新增的宏函数
  */
  _shot键(key){
    local thisKey
    if (this.mode == this.MODE_DEFAULT) {
      this._down(1)
      thisKey := MyFuns.getHotkey(key)
      while(MyFuns.getKeyState(thisKey)){
		    sleep(30)
	    }
      this._up(1)
    } else {
      this._shot切换()
    }
  }
  _模式切换(key){
    if (this.mode == this.MODE_DEFAULT) {
      this.mode := this.MODE_AUTO
      this.UI._statusBar.SetText("转为自动shot模式")
    } else {
      if (this.shotSwitch) {
        this._中止shot()
      }
      this.mode := this.MODE_DEFAULT
      this.UI._statusBar.SetText("转为默认shot模式")
    }
  }
  _游聚全屏移动(key){  
    ;WinMove -65, -0, , , "ahk_exe x-zone.exe", "entireUIWindow"
    WinMove -this.testParams[1], -this.testParams[2], , , "ahk_exe x-zone.exe", "entireUIWindow"
  }
  _游聚全屏还原(key){  
    WinMove 0, 0, , , "ahk_exe x-zone.exe", "entireUIWindow"
  }
  
  /* 重载宏接口
  */
  _setMacro(){
    this.macroMap := OrderMap()
    this.macroMap["shot键"] := this._shot键.bind(this)
    this.macroMap["模式切换"] := this._模式切换.bind(this)
    this.macroMap["游聚全屏移动"] := this._游聚全屏移动.bind(this)
    this.macroMap["游聚全屏还原"] := this._游聚全屏还原.bind(this)
    this.macroMap["空函数"] := this._空函数.bind(this)
    this.macroArr := this.macroMap.getKeys()
  }
}

/* 制作怒首领蜂专用UI
*/
class DDPUI extends CommonUI {

  DEFAULT_HOTKEYS := "~d"
  EXE_ARRAY := ["arcade64.exe", MyEmu.MAME, MyEmu.WINKAWAKS, MyEmu.XZONE]

  /* 构造函数
  */
  __New(macro){
    super.__New("怒首领蜂", macro)
    this._preset := OrderMap([
      "怒首领蜂", ["shot键", "模式切换", "游聚全屏移动", "游聚全屏还原"]
    ])
    this._macro.UI := this ;绑定UI
  }

  /* 重写接口
  */

  /* 重写setup,更改可选的exe,读入预设
  */
  setup(){
    super.setup()
    this._myGui.opt("+AlwaysOnTop")
    this._myGui.show("x1100 y330")
    this.readPresetMenu("怒首领蜂")
  }

}

/* 运行当前脚本
*/ if (A_ScriptName == "怒首领蜂.2.ahk") {
  iconFile := "..\Icon\怒首领蜂最大往生_光头像01.jpg"
  TraySetIcon(iconFile, , 1)

  face := FaceDetector() ;方向检测对象
  macro := DDPMacro(face, ["w","e"]) ;宏对象,有界面时第二个参数可以随便写但长度不要小于2
  ;新建界面对象并显示
  ui := DDPUI(macro)
  ui.setup()
  ;更新组件内容
  ;ui._exeComboBox.Choose("arcade64.exe")
  ui._exeComboBox.Choose(MyEmu.MAME)
  ;ui._exeComboBox.Choose(MyEmu.XZONE)
  ui._gameKeyEdit.Text := "z,a,space" 
  ui._hotkeyEdit.Text := "~s,~w"
  ui._fpsEdit.Text := "20"
  ui._testEdit.Text := "1750,2100,2100,2100"
  ui.readPresetMenu("怒首领蜂")
}
